package com.ipartek.formacion.colecciones;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;

public class ArraysDeMierda {
	static final int NUM_REGISTROS = 1000000;

	public static void main(String[] args) {
		Integer[] arrayInteger = new Integer[NUM_REGISTROS];
		ArrayList<Integer> listaInteger = new ArrayList<Integer>();
		long tiempoArray = 0;
		long tiempoListaFor = 0;
		long tiempoListaItr = 0;

		// Rellenar mi Array y ArrayList
		rellenarArray(arrayInteger);
		rellenarArrayList(listaInteger);

		for (int i = 0; i < 100; i++) {
			tiempoArray = tiempoArray + recorrerArray(arrayInteger);
		}
		System.out.println("Tardo " + (tiempoArray / 100)
				+ " ms de media en recorrer el Array.");
		for (int i = 0; i < 100; i++) {
			tiempoListaFor = tiempoListaFor + recorrerListaFor(listaInteger);
		}
		System.out.println("Tardo " + (tiempoListaFor / 100)
				+ " ms de media en recorrer el Array con un For.");
		for (int i = 0; i < 100; i++) {
			tiempoListaItr = tiempoListaItr + recorrerListaItr(listaInteger);
		}
		System.out.println("Tardo " + (tiempoListaItr / 100)
				+ " ms de media en recorrer el ArrayList con un Iterador.");
	}

	public static void rellenarArray(Integer[] miArray) {
		Random generadorNumeros = new Random();
		for (int i = 0; i < miArray.length; i++) {
			miArray[i] = generadorNumeros.nextInt(1000000);
		}
	}

	public static void rellenarArrayList(ArrayList<Integer> arrayList) {
		Random generadorNumeros = new Random();
		for (int i = 0; i < NUM_REGISTROS - 1; i++) {
			arrayList.add(i, generadorNumeros.nextInt(1000000));
		}
	}

	public static long recorrerArray(Integer[] miArray) {
		long start = System.currentTimeMillis();
		for (int i = 0; i < miArray.length; i++) {
			miArray[i] += 1;
		}
		long stop = System.currentTimeMillis();
		return (stop - start);
	}

	public static long recorrerListaFor(ArrayList<Integer> listaArray) {
		long start = System.currentTimeMillis();
		for (int i = 0; i < listaArray.size(); i++) {
			listaArray.set(i, listaArray.get(i) + 1);
		}
		long stop = System.currentTimeMillis();
		return (stop - start);
	}

	public static long recorrerListaItr(ArrayList<Integer> listaArray) {
		long start = System.currentTimeMillis();
		int indiceItr = 0;
		Iterator<Integer> itr = listaArray.iterator();
		while (itr.hasNext()) {
			listaArray.set(indiceItr, itr.next() + 1);
			indiceItr += 1;
		}
		long stop = System.currentTimeMillis();
		return (stop - start);
	}
}
